﻿//-----------------------------------------------------------------------------
// Case ITI1 2012, Blok 2 
// Auteurs: Robin Vinders & Ruben Pelzer
// Copyright (c) 01/02/2013 12:00:00 All Right Reserved
//-----------------------------------------------------------------------------
// <summary>Deze class representeert </summary>

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataAccess
{

    public class Database
    {
        private string connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\db\db.mdf;Integrated Security=True;Connect Timeout=30";
        private DataTable tabel = new DataTable();
        private SqlDataAdapter adapter;
        private SqlConnection connection;

        public Database()
        {
            connection = new SqlConnection(connectionString);
        }

        /// <summary>
        /// Met behulp van deze methode kun je een select-statement uitvoeren.
        /// </summary>
        /// <param name="sql_command">Het sql statement dat door de classen gebruikt wordt.</param>
        /// <returns>Het aantal rijen na het uitvoeren van het sql_command</returns>
        public DataTable Select(string sql_command)
        {
              
                // Command uitvoeren en zet data in tabel
                adapter = new SqlDataAdapter(sql_command, connectionString);
                tabel = new DataTable();
                adapter.Fill(tabel);
                return tabel;
        }

        /// <summary>
        /// Met behulp van deze methode voer je een query uit waarmee je dingen kunt invoeren, wijzigen en verwijderen.
        /// </summary>
        /// <param name="sql_command">Het sql statement dat door de classen gebruikt wordt.</param>
        /// <returns>Hier wordt het command in de adapter gezet en uitvoerd door de adapter.</returns>
        private int Uitvoeren(string sql_command)
        {
            try
            {
                connection.Open();

                // Adapter en Command aanmaken
                adapter = new SqlDataAdapter();
                SqlCommand insertCommand = new SqlCommand(sql_command,connection);

                // Command in adapter zetten en uitvoeren
                adapter.InsertCommand = insertCommand;
                int aantal = adapter.InsertCommand.ExecuteNonQuery();
                return aantal;
            }
            catch (Exception obj)
            {               
                return 0;
            }
            finally
            {
                connection.Close();
            }
        }

        /// <summary>
        /// Deze methode voert het insert command uit.
        /// </summary>
        /// <param name="sql_command">Het insert command dat uitgevoerd wordt.</param>
        /// <returns>Het ingevoerde command wordt uitgevoerd.</returns>
        public int Insert(string sql_command)
        {
            
            return Uitvoeren(sql_command);
        }

        /// <summary>
        /// Deze methode voert het delete command uit.
        /// </summary>
        /// <param name="sql_command">Het ingevoerde delete command.</param>
        /// <returns>Het ingevoerde command wordt uitgevoerd.</returns>
        public int Delete(string sql_command)
        {
           
            return Uitvoeren(sql_command);
        }

        /// <summary>
        /// Deze methode voert het update command uit.
        /// </summary>
        /// <param name="sql_command">Het ingevoerde update command.</param>
        /// <returns>Het ingevoerde command wordt uitgevoerd.</returns>
        public int Update(string sql_command)
        {
            try
            {
                connection.Open();
               

                // Addapter en Command aanmaken
                adapter = new SqlDataAdapter();
                SqlCommand UpdateCommand = new SqlCommand(sql_command, connection);

                // Command in addapter zetten en uitvoeren
                adapter.UpdateCommand = UpdateCommand;
                int aantal = adapter.UpdateCommand.ExecuteNonQuery();
                return aantal;
            }
            catch (Exception obj)
            {
                
                return 0;
            }
            finally
            {
                connection.Close();
            }
        }
    }
}
